package br.ucb.rest.negocio.impl;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.persistence.EntityManager;

import org.apache.log4j.Logger;

import br.ucb.rest.negocio.AbstractBusinessObject;
import br.ucb.rest.persistencia.dao.GenericDAO;
import br.ucb.rest.persistencia.vo.IngredienteVO;

public class IngredienteBOS extends AbstractBusinessObject {
	private Logger logger = Logger.getLogger(IngredienteBOS.class);
	
	private static IngredienteBOS instance;
	
	private IngredienteBOS() {
		super();
		logger.info("Singleton instanciado com sucesso!");
	}
	
	public static IngredienteBOS getInstance() {
		if (instance == null) {
			instance = new IngredienteBOS();
		}
		return instance;
	}
	
	public List<IngredienteVO> listarIngredientesPorCardapio(Integer nuCardapio) {
		EntityManager em = emf.createEntityManager();
		GenericDAO dao = GenericDAO.getInstance(em);
		try {
			Map<String, Object> parametros = new HashMap<String, Object>(1);
			parametros.put("nuCardapio", nuCardapio);
			List<IngredienteVO> retorno = (List<IngredienteVO>) dao.namedQueryListaResultados("IngredienteVO.listarPorCardapio", parametros);
			return retorno;
		}catch (Exception e) {
			logger.error("Ocorreu um erro ao buscar registros no banco de dados!", e);
			return null;
		}finally {
			GenericDAO.liberarInstancia();
			em.close();
		}
	}
	
	public List<IngredienteVO> listarIngredientes() {
		EntityManager em = emf.createEntityManager();
		GenericDAO dao = GenericDAO.getInstance(em);
		try {
			
			List<IngredienteVO> retorno = (List<IngredienteVO>) dao.recuperarTodos(IngredienteVO.class, "noIngrediente");
			return retorno;
		}catch (Exception e) {
			logger.error("Ocorreu um erro ao buscar registros no banco de dados!", e);
			return null;
		}finally {
			GenericDAO.liberarInstancia();
			em.close();
		}
	}

}
